package experiment.e05.code;

/**
 * @author thinkpad - 83start
 * @version v1.0
 * @create 2022/10/13 15:45
 * @package experiment.e05.code
 * @description 设计一个Pencil类，RubberPencil类是Pencil的子类并实现了Erase接口。
 * 1)接口Erase包含方法
 * public void erase(String s);
 * 2）Pencil类：具有以下属性和方法：
 * 属性type：String类型，表示Pencil的品牌
 * 方法：toString（String r）：及构造函数，设置type及取得type值的方法
 * 3）RubberPencil类：（可根据自己的需要添加其他方法和属性）
 * 重写父类的toString()方法，输出橡皮铅笔的相关属性，构造函数。
 * 4）Test类作为主类完成测试功能：其中要求通过使用造型等功能输出Pencil、RubberPencil的相关信息。
 */

public class Ch03 {
}

class Test {
    public static void main(String[] args) {
        // 测试铅笔类
        Pencil pencil = new Pencil("铅笔");
        System.out.println(pencil.toString("我们是铅笔"));

        // 测试可擦铅笔类
        RubberPencil rubberPencil = new RubberPencil("可擦铅笔");
        System.out.println(rubberPencil.toString("我们是可擦铅笔"));
        rubberPencil.erase("我是一个下拉框的方式");
    }
}

/**
 * 擦除接口
 */
interface Erase {
    /**
     * 擦除类
     *
     * @param s
     */
    public void erase(String s);
}

/**
 * Pencil 类
 */
class Pencil {
    // 实例对象
    private String type;

    // 构造方法
    public Pencil() {
    }

    public Pencil(String type) {
        this.type = type;
    }

    // set && get
    public void setType(String type) {
        this.type = type;
    }

    public String getType() {
        return type;
    }

    // toString
    public String toString(String s) {
       return type + "正在写：" + s;
    }
}

/**
 * 可擦 Pencil 类
 */
class RubberPencil extends Pencil implements Erase {

    // 构造方法
    public RubberPencil(String type) {
        super(type);
    }

    @Override
    public void erase(String s) {
        System.out.println(super.getType() + "正在擦除：" + s);
    }

    @Override
    public String toString(String s) {
        return super.getType() + "正在写：" + s;
    }
}
